package com.boge.socket;

import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.FilterEvent;

public interface SessionListener {

	/**
	 * 当有新的连接建立的时候，该方法被调用。
	 * @param session
	 * @throws Exception
	 */
	void sessionCreated(IoSession session) throws Exception;
	
	/**
	 * 当连接被关闭的时候，此方法被调用。
	 * @param session
	 * @throws Exception
	 */
	void sessionClosed(IoSession session) throws Exception;
	
	/**
	 * 调用任何异常是由用户执行或由 MINA IoHandler 抛出。如果原因是IOException实例，MINA会自动关闭连接。
	 * @param session
	 * @param cause
	 * @throws Exception
	 */
	void exceptionCaught(IoSession session, Throwable cause) throws Exception;

	/**
	 * 当消息被成功发送出去的时候，此方法被调用。
	 * @param session
	 * @param message
	 * @throws Exception
	 */
	void messageSent(IoSession session, Object message) throws Exception;
	
	/**
	 * 当连接变成闲置状态的时候，此方法被调用。
	 * @param session
	 * @param status
	 */
	void sessionIdle(IoSession session, IdleStatus status);

	/**
	 * 当有新的连接打开的时候，该方法被调用。该方法在 sessionCreated之后被调用。
	 * @param session
	 */
	void sessionOpened(IoSession session);

	/**
	 * 当接收到新的消息的时候，此方法被调用。
	 * @param session
	 * @param message
	 */
	void messageReceived(IoSession session, Object message);

	/**
	 * 处理一个 half-duplex TCP通道关闭
	 * @param session
	 */
	void inputClosed(IoSession session);

	/**
	 * 未注册的action
	 * @param session
	 * @param message
	 * @throws Exception
	 */
	void notRegAction(IoSession session, Object message) throws Exception;

	/**
	 * 过滤事件
	 * @param session
	 * @param filterEvent 过滤事件
	 */
	void event(IoSession session, FilterEvent filterEvent);




	//  自定义区域


	/**
	 * 未能发送的数据
	 * @param object
	 */
	void notSendData(Object object);


}
